#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

#include "hb_gpio.h"
#define SYSFS_GPIO_DIR "/sys/class/gpio"
#define MAX_BUF 64
#define RET_OK 0

struct hobot_pi_pin
{
    char *gpio_num;
    int pin_num;
};

struct hobot_pi_pin hpp[] = {
    {"N/A", 0},
    {"11", 0},
    {"10", 0},
    {"38", 0},
    {"N/A", 0},
    {"6", 0},
    {"5", 0},
    {"30", 0},
    {"N/A", 0},
    {"18", 0},
    {"19", 0},
    {"17", 0},
    {"N/A", 0},
    {"N/A", 0},
    {"14", 0},
    {"31", 0},
    {"13", 0},
    {"103", 0},
    {"29", 0},
    {"N/A", 0},

    {"N/A", 0},
    {"N/A", 0},
    {"N/A", 0},
    {"95", 0},
    {"96", 0},
    {"102", 0},
    {"N/A", 0},
    {"32", 0},
    {"7", 0},
    {"N/A", 0},
    {"15", 0},
    {"16", 0},
    {"120", 0},
    {"N/A", 0},
    {"N/A", 0},
    {"12", 0},
    {"N/A", 0},
    {"27", 0},
    {"104", 0},
    {"108", 0},
};

int main(int argc, char *argv)
{
    int num = sizeof(hpp) / sizeof(struct hobot_pi_pin);
    printf("s = %ld\n", sizeof(hpp) / sizeof(struct hobot_pi_pin));
    for (size_t i = 0; i < 20; i++)
    {
        hpp[i].pin_num = 2 + i * 2;
    }
    for (size_t i = 20; i < 40; i++)
    {
        hpp[i].pin_num = 1 + (i - 20) * 2;
    }
    for (size_t i = 0; i < 40; i++)
    {
        // hpp[i].pin_num = 1 + i * 2;
        printf("hpp[%ld] gpio_num, %s\tpin_num %d\n", i, hpp[i].gpio_num, hpp[i].pin_num);
        if (!strcmp(hpp[i].gpio_num, "N/A"))
        {
            int gpio = atoi("hpp[i].gpio_num");
            int ret = gpio_export(gpio);
            if (ret)
            {
                printf("gpio_export err %d\n", ret);
            }
            ret = gpio_set_dir(gpio, 1);
            if (ret)
            {
                printf("gpio_set_dir err %d\n", ret);
            }
            ret = gpio_set_dir(gpio, 1);
            if (ret)
            {
                printf("gpio_set_dir err %d\n", ret);
            }
            int cnt = 10;
            while (cnt > 0)
            {
                ret = gpio_set_value(gpio, 1);
                if (ret)
                {
                    printf("gpio_set_value err %d\n", ret);
                }
                sleep(1);
                ret = gpio_set_value(gpio, 0);
                if (ret)
                {
                    printf("gpio_set_value err %d\n", ret);
                }
                sleep(1);
                cnt --;
            }
            ret = gpio_unexport(gpio);
            if (ret)
            {
                printf("gpio_unexport err %d\n", ret);
            }
        }
    }
    // while (1)
    // {
    // }
}